
package com.softeem.yqst_server.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.softeem.yqst_server.dto.Result;
import com.softeem.yqst_server.entity.Music;
import com.softeem.yqst_server.service.MusicService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Objects;

@RequestMapping("/music")   //命名空间(namespace)
@RestController
public class MusicController {
    //完成以下有关音乐资源的管理功能
//1. 音乐添加
//2. 音乐列表查询
//3. 音乐删除(根据ID)
//4. 根据音乐名称模糊查询
//5. 根据ID修改音乐信息
//6. 根据ID查询音乐详情


        @Autowired
        private MusicService musicService;

        //完成以下有关音乐资源的管理功能

        /**
         * 添加音乐信息
         *
         * @param music 音乐对象，包含音乐的详细信息
         * @return 返回操作结果，成功则返回添加的音乐信息，失败则返回错误信息
         */
        @PostMapping("/add")
        public Result add(Music music){
            // 通过音乐服务保存音乐信息
            boolean b = musicService.save(music);
            // 根据保存结果返回相应的操作结果
            return b ? Result.ok().setMsg("添加成功").setData(music) : Result.fail().setMsg("添加失败");
        }

        //2. 音乐列表查询
        @GetMapping("/listAll")
        public Result listAll(){
            // 通过音乐服务查询音乐列表
            return Result.ok().setData(musicService.list());
        }

        /**
         * 分页查询音乐信息
         */
        @GetMapping("/list")
        public Result list(@RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "5") Integer limit){
            //分页查询（需要配置分页拦截器）  select * from music  limit ?,?  (AOP：面相切面编程)
            List<Music> list = musicService.list(new Page<Music>(page, limit));
            return Result.ok().setData(list);
        }

        //3. 音乐删除(根据ID)
        @GetMapping("/delete")
        public Result delete(Integer id){
            // 通过音乐服务删除音乐信息
            boolean b = musicService.removeById(id);
            // 根据删除结果返回相应的操作结果
            return b ? Result.ok().setMsg("删除成功") : Result.fail().setMsg("删除失败");
        }

        //4. 根据音乐名称模糊查询
        @GetMapping("/search")
        public Result search(String name,Integer page,Integer limit){
            //构建查询条件包装器（ name like '%...%'）
            QueryWrapper<Music> query = Wrappers.query(Music.class).like("name", name);
            // 通过音乐服务查询音乐列表(含分页)
            List<Music> list = musicService.list(new Page<Music>(page,limit),query);
            return Result.ok().setData(list);
        }

        //5. 根据ID修改音乐信息
        @PutMapping("/update")
        public Result update(Music music){
            // 通过音乐服务修改音乐信息
            boolean b = musicService.updateById(music);
            // 根据修改结果返回相应的操作结果
            return b ? Result.ok().setMsg("修改成功") : Result.fail().setMsg("修改失败");
        }

        //6. 根据ID查询音乐详情
        @GetMapping("/detail")
        public Result detail(Integer id){
            // 通过音乐服务查询音乐详情
            Music music = musicService.getById(id);
            // 返回查询结果
            return Objects.nonNull(music) ? Result.ok().setData(music) : Result.fail().setMsg("无结果");
        }

    }

/*
*
@PostMapping("/add"): 用于处理添加音乐的 POST 请求，接收一个 Music 对象。
@GetMapping("/list"): 用于处理查询所有音乐的 GET 请求，返回音乐列表。
@DeleteMapping("/delete/{id}"): 用于处理根据 ID 删除音乐的 DELETE 请求，接收路径变量 id。
@GetMapping("/search"): 用于处理根据音乐名称模糊查询的 GET 请求，接收查询关键词 keyword。
@PutMapping("/update/{id}"): 用于处理根据 ID 修改音乐信息的 PUT 请求，接收路径变量 id 和请求体中的 Music 对象。
@GetMapping("/detail/{id}"): 用于处理根据 ID 查询音乐详情的 GET 请求，接收路径变量 id。

 */